package org.example.dao;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.example.domain.MyStudent;
import org.example.domain.Student;
import org.example.vo.QueryParam;
import org.example.vo.StudentVO;

import java.util.List;
import java.util.Map;

/**
 * @author taoshen
 * @create 2021/3/28
 */
public interface StudentDao {
    //查询student表中所有数据
    public List<Student> selectStudents();

    /**
     * 形参Student 表示要插入数据的实体类形式
     * 返回值int 表示成功插入几条数据
     */
    public int insertStudent(Student student);

    /**
     * 通过id查询出一个Student
     */
    public Student selectStudentById(Integer id);

    /**
     * 通过姓名和年龄查询出一个Student
     */
    public Student selectStudentByNameAndAge(@Param("studentName") String name, @Param("studentAge") Integer age);

    /**
     * 通过参数实体类类查询
     */
    public Student selectStudentByQueryParam(QueryParam param);

    /**
     * 按照形参的顺序来传参
     */
    public Student selectStudentByOrder(String name, Integer age);

    /**
     * 通过map来传递多个参数
     */
    public Student selectStudentByMap(Map<String, Object> map);

    /**
     * 查询全表 根据某个字段进行排序
     */
    public List<Student> selectStudentOrder(@Param("str") String str);

    /**
     * 查询某个同学封装进StudentVO
     */
    public StudentVO selectStudent(Integer id);

    /**
     * 查询一共有多少个同学
     */
    public Integer selectStudentCount();

    /**
     * 查询一个学生 resultType设置为map
     */
    public Map<Object, Object> selectStudentToMap(Integer id);

    /**
     * 查询出一个学生 结果集封装进resultMap
     *
     * @param id
     * @return
     */
    public MyStudent selectStudentToResultMap(Integer id);

    /**
     * 根据name模糊查询  在java中拼接%
     */
    public Student selectLikeNameOne(String likeName);

    /**
     * 根据name模糊查询 在sql语句上拼接%
     */
    public Student selectLikeNameTwo(String likName);

    /**
     * 使用if标签进行条件判断来拼接SQL语句
     */
    public List<Student> selectStudentIf(Student student);

    /**
     * 使用where标签进行条件判断的拼接SQL语句
     */
    public List<Student> selectStudentWhere(Student student);

    /**
     * 使用foreach进行遍历基本数据类型集合查询
     */
    @Select("select * from student")
    public List<Student> selectForeachOne(List<Integer> studentIds);

    /**
     * 使用foreach进行遍历java实体类集合查询
     */
    public List<Student> selectForeachTwo(List<Student> students);

    /**
     * 使用pageHelper来做一个分页查询
     */
    public List<Student> selectStudentsOnPageHelper();

    /**
     * 测试git的效果
     */
}
